package cl.tinet.reservaCD.usuario;

import java.util.ArrayList;

import javax.persistence.Query;
import javax.persistence.EntityManager;

import cl.tinet.reservaCD.modelo.Usuario;

/**
 * 
 * Clase con el CRUD del usuario a la base de datos que implementa la
 * interface UsuarioDao.
 * 
 * @author Carlos Duque.
 */
public class UsuarioDaoImpl implements UsuarioDao {

    /**
     * Entity manager.
     */
    private EntityManager em;

    /**
     * Constructor que inicializa el manejador de entidad.
     * 
     * @param em
     *            entidad que se va a manejar.
     */
    public UsuarioDaoImpl(EntityManager em) {
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public void crearUsuario(Usuario usuarioCrear) {
        em.persist(usuarioCrear);
    }

    /**
     * {@inheritDoc}
     */
    public void eliminarUsuario(Usuario usuarioEliminar) {
        em.remove(usuarioEliminar);
    }

    /**
     * {@inheritDoc}
     */
    public void actualizarUsuario(Usuario usuarioActualizar) {
        em.merge(usuarioActualizar);
    }

    /**
     * {@inheritDoc}
     */
    public Usuario buscarUsuario(Usuario usuarioBusqueda) {

        Usuario resultadaFinal = null;

        String sql = "Select u FROM Usuario u WHERE nombreusuario =:nuevo";
        Query consulta =
                em.createQuery(sql).setParameter("nuevo",
                        usuarioBusqueda.getNombreUsuario());

        Usuario resultado = (Usuario) consulta.getSingleResult();
        resultadaFinal = resultado;

        return resultadaFinal;
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Usuario> listaUsuario() {
        return (ArrayList<Usuario>) em.createQuery("SELECT U FROM Usuario U")
                .getResultList();
    }

    /**
     * {@inheritDoc}
     */
    public Usuario validarUsuario(Usuario usuarioBusqueda) {

        Usuario resultadaFinal = null;

        String sql =
                "Select u FROM Usuario u WHERE nombreusuario =:Nombreusuario AND password =:Password";
        Query consulta = em.createQuery(sql);
        consulta.setParameter("Nombreusuario",
                usuarioBusqueda.getNombreUsuario());
        consulta.setParameter("Password", usuarioBusqueda.getPassword());

        Usuario resultado = (Usuario) consulta.getSingleResult();
        resultadaFinal = resultado;

        return resultadaFinal;
    }

}
